import { reqCartList, reqDeleteById, reqUpdateChecked } from '@/axios/api/api.js'
export default {
  namespaced: true,
  state: {
    // 用户购物车数组对象
    cartlist: []
  },
  mutations: {
    // 用户购物车数组
    GETCARTLIST(state, res) {
      state.cartlist = res
    }
  },
  actions: {
    // 获取购物车列表数据(根据用户uuid)
    async getCartList({ commit }) {
      const res = await reqCartList()
      if (res.code == 200) {
        commit('GETCARTLIST', res.data)
      }
    },
    // 根据 id 删除对应商品
    async deleteGoods({ commit }, id) {
      let res = await reqDeleteById(id)
      if (res.code == 200) {
        return Promise.resolve('ok')
      } else {
        return Promise.reject(new Error('err'))
      }
    },
    // 更改商品的复选状态
    async updateGoodChecked({ commit }, { skuId, isChecked }) {
      // console.log(skuId, isChecked);
      let res = await reqUpdateChecked(skuId, isChecked)
      // console.log(res);
      if (res.code == 200) {
        return 'ojbk'
      } else {
        return Promise.reject(new Error('err'))
      }
    },
    // 删除全部已勾选的商品
    async deleteAllChecked({ getters, dispatch }) {
      // 存放promise实例
      let promiseArr = []
      await getters.cartList.cartInfoList.forEach(item => {
        // 筛选出已选的商品,调用删除接口
        let p = item.isChecked == 1 ? dispatch('deleteGoods', item.skuId) : ''
        // console.log(res, 'promise实例');
        promiseArr.push(p)
      })
      // console.log(promiseArr, '存放实例的数组');
      return Promise.all(promiseArr)
    },
    // 全选
    allChecked({ dispatch, getters }, isChecked) {
      // 存放promise实例
      let Promisearr = []
      getters.cartList.cartInfoList.forEach(x => {
        // 此方法为全改
        let p = dispatch('updateGoodChecked', { skuId: x.skuId, isChecked: isChecked })
        Promisearr.push(p)
      })
      // 返回promise实例,里面都是成功或失败的东西
      return Promise.all(Promisearr)
    }
  },
  getters: {
    // 处理数据结构
    cartList(state) {
      return state.cartlist[0] || {}
    }
  }
}